iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0
佛心分享-IT 人自學之術

Python學習馬拉松:30天挑戰系列 第 29

Day29. 實作練習:圈圈叉叉Tic-Tac-Toe --AI

  • 分享至 

  • xImage
  •  
  • 教學來源:https://www.youtube.com/watch?v=8ext9G7xspg
  • 這段程式碼執行了一個井字遊戲 (Tic-Tac-Toe) ,其中一位玩家可以是人類,另一位則可以是隨機電腦或使用了極小極大算法的“天才電腦”玩家。
  • 程式碼:
    ➤ game.py:
    https://ithelp.ithome.com.tw/upload/images/20241013/20168364JDxNtmJMHz.png

https://ithelp.ithome.com.tw/upload/images/20241013/20168364iiH9nVNfCy.png
https://ithelp.ithome.com.tw/upload/images/20241013/20168364LQf42s5Z6F.png
➤ player.py:
https://ithelp.ithome.com.tw/upload/images/20241013/20168364tjRJ3hhitA.png
https://ithelp.ithome.com.tw/upload/images/20241013/201683648F7SA4x5Hc.png

  • 執行結果:
    https://ithelp.ithome.com.tw/upload/images/20241013/20168364qgSoCp74xD.png
  • 程式說明:

➤ game.py:

  1. TicTacToe 類:這是遊戲的主要邏輯,包括棋盤設置、顯示棋盤、檢查是否有空位置,以及檢查是否有贏家。
    o print_board():顯示當前棋盤狀態。
    o print_board_nums():顯示棋盤每個位置的數字編號,方便玩家輸入選擇。
    o available_moves():返回棋盤上空位的索引。
    o make_move():進行玩家的移動並更新棋盤,檢查是否有贏家。
    o winner():檢查是否有玩家贏得比賽,通過檢查行、列和對角線。
  2. play() 函數:這個函數控制遊戲流程,兩個玩家交替進行移動,直到有贏家或平局。

➤ player.py:

  1. Player 類:為所有玩家定義基本的行為。
  2. RandomComputerPlayer 類:電腦玩家隨機選擇可用的空位。
  3. HumanPlayer 類:人類玩家輸入選擇位置,並且程式會檢查該位置是否有效。
  4. GeniusComputerPlayer 類:使用極小極大算法進行最佳決策,使其盡量贏得比賽。

➤ 極小極大算法:
這個演算法用於計算最佳移動。它模擬每個可能的結果,然後選擇能夠最大化電腦玩家贏面,並最小化對手贏面的移動。

  • 與第25天的內容比較:
    -AI玩家:
    o 現在的程式碼:有一個 GeniusComputerPlayer,使用了極小極大演算法 (minimax())來進行決策,這讓AI更具智慧,可以進行最佳決策。
    o 之前的程式碼:僅有RandomComputerPlayer,這個電腦玩家使用 random.choice()隨機選擇棋盤上的可用位置,並沒有智慧演算法來進行最佳化的移動。

上一篇
Day28. 實作練習:數獨解決器Sudoku Solver
下一篇
Day30. 實作練習:馬可夫鏈文本生成器 Markov Chain Text Composer
系列文
Python學習馬拉松:30天挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言